SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE [dbo].[paEjecutarRectificacionBajaDeServicio]
@idCola INT,
@Norma INT = NULL,
@SubServicioDeLaNorma INT OUTPUT,
@EsForzado BIT
AS

-- <ACTUALIZACIONES> 06 - 05 - 2009 por OTERO, Marcelo y SANES,  Jorge, Se agrego Manejo de Transacciones 


SET NOCOUNT ON

-- Atributos del subservicio a guardar  (tbSubServiciosRectificados) o elminar.
DECLARE @ServicioAgente INT
DECLARE @NroOrden INT
DECLARE @FechaAlta DATETIME
DECLARE @Baja VARCHAR(1)
DECLARE @FechaBaja DATETIME
DECLARE @FechaTermino DATETIME
DECLARE @Movimiento INT
DECLARE @TramiteAlta INT
DECLARE @TramiteBaja INT
DECLARE @NormaInicio INT
DECLARE @NormaFin INT
DECLARE @Plaza INT
DECLARE @SituacionLaboral INT
DECLARE @SituacionExtraordinaria INT
DECLARE @Nivel INT
DECLARE @Modalidad INT
DECLARE @Zona INT
DECLARE @Licencia INT
DECLARE @CodEnfermedad INT
DECLARE @EntidadCertificadora INT
DECLARE @NroCertificado INT
DECLARE @FechaCertificado DATETIME
DECLARE @EstadoLiqExt INT
DECLARE @idSubServicio INT
DECLARE @Error INT
DECLARE @Diagnostico VARCHAR(300)
DECLARE @Servicio INT

-- Atributos del SS Licencia a insertar en la cola
DECLARE @Agente INT
DECLARE @PlazaC INT
DECLARE @Fecha DATETIME
DECLARE @Organizacion INT
DECLARE @REsponsable INT
DECLARE @Fecha1 DATETIME
DECLARE @Fecha2 DATETIME
DECLARE @FechaTerminoC DATETIME
DECLARE @SitRev INT
DECLARE @NivelC INT
DECLARE @modalidadC INT
DECLARE @zonaC INT
DECLARE @cargosalarial INT
DECLARE @LicenciaC INT
DECLARE @cantidadhoras INT
DECLARE @movimientoC INT
DECLARE @estado INT
DECLARE @observaciones VARCHAR(255)
DECLARE @CausaAlta INT
DECLARE @borrar VARCHAR(1)
--DECLARE @Diagnostico VARCHAR(1000)
DECLARE @Destino INT

--Saco los valores de la ColaDeMovimientos correspondientes a idCola
SELECT @Agente = Agente, @PlazaC = Plaza, @Fecha = Fecha, @Organizacion = Organizacion, @Responsable = Responsable, @Fecha1 = Fecha1,
@Fecha2 = Fecha2, @SitRev = SitRev, @NivelC = Nivel, @ModalidadC = Modalidad, @ZonaC = Zona, @cargosalarial = cargosalarial, @licenciaC = licencia,
@cantidadhoras = cantidadhoras, @movimientoC = movimiento, @Estado = Estado, @Observaciones = observaciones, @CausaAlta = CausaAlta, 
@FechaTerminoC = FechaTermino
FROM tb_ColaDeMovimientos 
WHERE idCola = @idCola

SELECT @Error = 0

-- Si el Estado es Rechazado, Ejecutado o Ejecutado Forzado
IF @Estado = 2 or @Estado = 4 or @Estado = 5
	RETURN

BEGIN TRANSACTION tranRectificarBajaDeServicio

-- Obtengo el subservicio a rectificar
SELECT @idSubServicio = RectificaA, @borrar=borrar FROM tb_PlazasDeMovimiento WHERE idCola = @idCola

-- Primero extraigo todos los valores del SubServicio que se va a rectificar.
SELECT @ServicioAgente = Servicioagente, @NroOrden = NroOrden9, @FechaAlta = FechaAlta, @FechaBaja = Fechabaja,@FechaTermino = FechaTermino, @Movimiento = Movimiento,
@TramiteAlta = TramiteAlta, @TramiteBaja = TramiteBaja, @NormaInicio = NormaInicio, @NormaFin = NormaFin, @Plaza = Plaza, @SituacionLaboral = SituacionLaboral,
@SituacionExtraordinaria = SituacionExtraordinaria, @Nivel = Nivel, @Modalidad = Modalidad, @Zona = Zona, @Licencia = Licencia, @CodEnfermedad = CodEnfermedad,
@NroCertificado = NroCertificado, @EntidadCertificadora = EntidadCertificadora, @FechaCertificado = FechaCertificado, @EstadoLiqExt = EstadoLiqExt
FROM tb_SubServiciosAgentes WHERE idSubServicio = @idSubServicio

SELECT @Servicio = ServicioAgente FROM tb_SubServiciosAgentes WHERE idSubServicio = @idSubServicio

IF @borrar = 'S'
BEGIN
	UPDATE tb_SubServiciosAgentes SET baja='N', fechabaja=NULL, normaanterior=normafin, normafin=NULL WHERE idSubServicio = @idSubServicio
	SELECT @Error = @@ERROR
	IF @Error <> 0
		GOTO SALIR

	UPDATE tb_ServiciosAgentes SET baja='N', fechabaja=NULL, Normabaja=NULL, CausaBaja = NULL WHERE idServicioAgente = @ServicioAgente
	SELECT @Error = @@ERROR
	IF @Error <> 0
		GOTO SALIR
END
ELSE
BEGIN
	IF @FechaAlta <= @Fecha2	
	BEGIN
		DECLARE @normatemporalbaja INT
		SELECT @normatemporalbaja = normatemporalbaja FROM tb_SubserviciosAgentes WHERE idSubServicio = @idSubServicio
		IF @normatemporalbaja is NULL
			SELECT @normatemporalbaja = MAX(normatemporalbaja)+1 FROM tb_SubserviciosAgentes
		DECLARE @normabajaanterior VARCHAR(10)
		SELECT @normabajaanterior = descripcion FROM tb_Normas, tb_SubServiciosAgentes WHERE idNorma = normafin and idSubServicio = @idSubServicio
		
		UPDATE tb_SubServiciosAgentes SET fechabaja=DATEADD(DAY,-1,@fecha2), normaanterior=normafin, normatemporalbaja=@normatemporalbaja, normafin=@Norma WHERE idSubServicio = @idSubServicio
		SELECT @Error = @@ERROR
		IF @Error <> 0
			GOTO SALIR

		UPDATE tb_ServiciosAgentes SET fechabaja = DATEADD(DAY,-1,@fecha2), normabajaanteriores=normabajaanteriores+'-'+@normabajaanterior, NormaBaja = @Norma WHERE idservicioagente = @Servicioagente
		SELECT @Error = @@ERROR
		IF @Error <> 0
			GOTO SALIR
	END
	ELSE
	BEGIN
		SELECT @Diagnostico='* Error! La fecha de baja debe ser mayor a la fecha '+convert(varchar, @FechaAlta)+ ' correspondiente a el alta del último subservicio.'
	END
END

UPDATE tb_ColaDeMovimientos SET Estado = CASE WHEN @EsForzado = 0 THEN 4 ELSE 5 END, NTUserEjecutor = SYSTEM_USER, FechaEjecucion = GETDATE()  WHERE idCola = @idCola
SELECT @Error = @@ERROR
IF @Error <> 0
	GOTO SALIR

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- Se cambio esto, porque en la llamada al reporte BajaDeServicio.rpt necesita del ID de Servicio - 21-06-2007
--SELECT @SubServicioDeLaNorma = @IdSubServicio
SELECT @SubServicioDeLaNorma = ServicioAgente FROM Tb_SubServiciosAgentes WHERE IdSubServicio= @IdSubServicio
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

SALIR:
IF @Error = 0
	COMMIT TRANSACTION tranRectificarBajaDeServicio
ELSE 
	ROLLBACK TRANSACTION tranRectificarBajaDeServicio
GO
GRANT EXECUTE ON  [dbo].[paEjecutarRectificacionBajaDeServicio] TO [PersonalDocente]
GO
